package day01;

 class TestLambda {
     public static void main(String[] args) {
         testA();
         testB();
         testC();
         testD();
     }
     public static void testD() {
            D d1 = new D() {
                public int max(int a, int b) {
                    return Math.max(a, b);
                }
            };
            D d2 = (a, b) -> a>b?a:b;

            D d3= Math::max;
            int max = d1.max(1,2);
            System.out.println(max);
     }


     public static void testC() {
         //1.创建c接口的匿名内部对象
         C c1 = new C() {
             @Override
             public String show(String name) {
                 return "name="+name;
             }
         };
         //2.创建c接口的lambda表达式对象
         C c2 = name -> "name = " + name;

         //3.创建c接口的方法引用对象
         C c3 = TestLambda::show4;

         System.out.println( c3.show("张飞"));

     }
     public static String show4(String name) {
         return "name="+name;
     }


     public static void testB() {
         B b1 = new B() {
             @Override
             public void show(String name) {
                 System.out.println(name);
             }
         };
         //创建B接口的lambda表达式对象
         B b2 = name -> System.out.println(name);

         //创建B接口的方法引用对象
         B b3 = System.out::println;
         b3.show("肖俊杰");
     }


    public static void testA() {
        //1.创建A接口的匿名内部类对象
        A a1=new A() {
            @Override
            public void show(String name, int age) {
                System.out.println(name+","+age);
            }
        };
        //2.将匿名内部类对象改成lambda表达式
        A a2=(name, age) -> System.out.println(name+","+age);
        a2.show("张三",18);
        //3.使用方法引用替换lambda表达式
        A a3=TestLambda::show2;
        a3.show("李四",20);
        //4.使用方法引用替换lambda表达式
        A a4=new TestLambda()::show3;
        a4.show("王五",23);
    }

    //定义一个成员方法，故意让返回值和形参和A接口中的方法一致
    public static void show2(String name, int age) {
        System.out.println("show2"+name+","+age);
    }
    public void show3(String name, int age) {
        System.out.println("show3"+name+","+age);
    }
}